﻿<!DOCTYPE html>

<html lang="ru" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title>Преобразование switch в полиморфизм</title>
        <link rel="stylesheet" href="app.css" type="text/css" />
    </head>
    <body>
        <h1>Преобразование switch в полиморфизм</h1>
        <p>
            Условие задачи. Преобразовать код из одного варианта в другой.
            <a href="https://gist.github.com/Test20130521/2287d98c96c963bdf8f1/7d886a710f7a477b70d63bada0edab1fa1fb22d9">
                Первоначальный вариант кода</a>.
            <a href="https://gist.github.com/Test20130521/2287d98c96c963bdf8f1/7d886a710f7a477b70d63bada0edab1fa1fb22d9">
                Конечный вариант кода</a>.
        </p>
        <p>
            План действий.
        </p>        
        <ul>
            <li>
                <a href="#step1">(1)</a> Сделать контейнер <code>ChoiceContainer</code>
                для параметров <code>choice</code>, <code>choice1Data</code>, <code>choice2Data</code>.
                Фрагмент кода со <code>switch</code> уйдет в метод класса <code>ChoiceContainer</code>.
                На месте вызова метода появится строчка <code>сontainerChoice.Do(sharedData)</code>.                
            </li>
            <li>
                <a href="#step2">(2)</a> Произвести расщепление класса <code>ChoiceContainer</code>
                на иерархию: интерфейс <code>IChoiceContainer</code>,
                и две реализации в двух пространствах имен <code>Choice1.ChoiceContainer</code>
                и <code>Choice2.ChoiceContainer</code>.
            </li>
            <li>
                <a href="#step3">(3)</a> Сделать Inline для параметров типа <code>Choice</code>.
            </li>
        </ul>
        <p>
            После этого удалим не использующиеся методы, сделаем переименования и очистку кода. В результате
            получим конечный вариант кода.
        </p>
        <!--TODO: Static to instance method-->
        <!--//TODO: сделать ссылки в пунктах плана действий  на детальное описание действий -->
        <!--//TODO: номера строк на скриншоте с заметой в конструкторе не правильные-->
        <ol>
            <li id="step1">
                Контейнер для параметров <code>ChoiceContainer</code>.
                <ol>
                    <li>
                        <a href="http://www.jetbrains.com/resharper/webhelp/Refactorings__Extract_Class_from_Parameters.html">
                            Extract Class from Parameters</a>.
                        <br/><img src="img/r001.png"/>
                    </li>
                    <li>
                        <a href="http://www.jetbrains.com/resharper/webhelp50/Refactorings__Extract_Method.html">
                            Extract Method</a>.
                        <br/><img src="img/r002.png"/>                        
                    </li>
                </ol>
            </li>
            <li id="step2">
                Расщепление контейнера на иерархию классов.
            </li>
            <li id="step3">
                Inline.
            </li>
        </ol>
    </body>
</html>